import axios from 'axios'
import config from '../config/index'
import { ElMessage } from 'element-plus'

// console.log(config);

const NETWORK_ERROR = '网络请求异常，请稍后重试';
// 创建一个axios实例对象
const service = axios.create({
    baseURL: config.baseApi,
})

// 在请求之前做一些事情
service.interceptors.request.use((request) => {
    // 可以自定义header
    // jwt-token 认证的时候
    return request
})

// 请求之后做一些事情
service.interceptors.response.use((request) => {
    console.log(request.data);
    const { code, data, msg } = request.data
    if(code === 200){
        return data
    }else{
        // 网络请求错误
        ElMessage.error(msg || NETWORK_ERROR);
        return Promise.reject(msg || NETWORK_ERROR)
    }
})

/* 
    封装的核心函数
    options 为 Object {
        method: 'get',
        data: {},
        mock: false
    }
 */
function request(options){
    options.method = options.method || 'get'
    if(options.method.toLowerCase() === 'get'){
        options.params = options.data
    }
    // 对 mock 的处理
    let isMock = config.mock  //  取自 config 里面的index.js 里面的mock
    // 判断当前 请求时候 有mock的请求地址要求，如果有就覆盖
    if(typeof options.mock !== 'undefined'){
        isMock = options.mock
    }
    // 对线上环境做处理
    if(config.env === 'prod'){
        // 如果是线上环境，就不给用mock的机会
        service.defaults.baseURL = config.baseApi
    }else{
        service.defaults.baseURL = isMock ? config.mockApi : config.baseApi
    }

    return service(options)
}

export default request